﻿#ifndef UTIL_H
#define UTIL_H
#include <QString>
#include <QPushButton>

typedef struct _IMG_RECT_INT_
{
    uint iX;
    uint iY;
    uint iWidth;
    uint iHeight;
}IMG_RECT_INT;

typedef struct _IMG_RECT_FLOAT_
{
    float fX;
    float fY;
    float fWidth;
    float fHeight;

    // 校验坐标值是否在[0, 1.0]之间
    bool check()
    {
        return !(fX < 0 || fY < 0 || fWidth < 0 || fHeight < 0 || fX > 1 || fY > 1 || fWidth > 1 || fHeight > 1);
    }
}IMG_RECT_FLOAT;

bool FileExist(const QString& strFileName);

bool ReadFileByBinary(const std::string &strFile, std::string &strContext);

QPushButton* NewPTBWithIcon(const QString& strTitle, const QString& strTip, const QIcon& icon, QWidget* parent);

bool checkValidNumber(const QString& strSrc);

// 根据限定范围进行校验
void checkNumWithRange(uint& iNum, const uint iMin, const uint iMax);

// 根据真实坐标值在图片上画框
bool picDrawRectLocation(QImage& pImg, const IMG_RECT_INT& stRect, const QRgb pColour, const uint pSize);

// 根据归一化坐标值在图片上画框
bool picDrawRectNormalization(QImage& pImg, const IMG_RECT_FLOAT& stRect, const QRgb pColour, const uint pSize);

// 根据路径获取图片数据
bool getImgFromPath(QImage& pImg, const QString& strPath);

// 根据路径提取文件格式，以.为依据
QString getFormatFromFile(const QString& strPath);

// 打开文件窗口，并选取指定文件
QString GetFileFromFileDialog(QWidget* parent, const QString& strFileParam);

// 根据状态值确认界面展示或关闭
void DialogShowAndHide(const bool bStatus, QWidget* pDialog);

#endif // UTIL_H
